// Generated from /Users/morandat/work/src/reactor-vmkit-merge/lib/Relational.dispatch
template<typename OP>
Logical* relBinOperator(Any * left, Any * right) {
	llvm_gcroot(left, 0);
	llvm_gcroot(right, 0);
	int ltype = left->getType(left);
	int rtype = right->getType(right);
	if(!Any::isOfType<Array>(left)) dispatchError(static_cast<Any*>(left), static_cast<Any*>(right));
	if(!Any::isOfType<Array>(right)) dispatchError(static_cast<Any*>(left), static_cast<Any*>(right));
	int pos = ((ltype&250)>>1) | ((rtype&250) << (5));
	switch(pos){
		case 3185:
			return relBinOperatorImpl<OP, Logical, Logical>(static_cast<Logical*>(left), static_cast<Logical*>(right));
		case 3377:
			return relBinOperatorImpl<OP, Int, Logical>(static_cast<Int*>(left), static_cast<Logical*>(right));
		case 3188:
			return relBinOperatorImpl<OP, Int, Logical>(static_cast<Int*>(right), static_cast<Logical*>(left));
		case 3633:
			return relBinOperatorImpl<OP, Double, Logical>(static_cast<Double*>(left), static_cast<Logical*>(right));
		case 3192:
			return relBinOperatorImpl<OP, Double, Logical>(static_cast<Double*>(right), static_cast<Logical*>(left));
		case 3380:
			return relBinOperatorImpl<OP, Int, Int>(static_cast<Int*>(left), static_cast<Int*>(right));
		case 3636:
			return relBinOperatorImpl<OP, Double, Int>(static_cast<Double*>(left), static_cast<Int*>(right));
		case 3384:
			return relBinOperatorImpl<OP, Double, Int>(static_cast<Double*>(right), static_cast<Int*>(left));
		case 3640:
			return relBinOperatorImpl<OP, Double, Double>(static_cast<Double*>(left), static_cast<Double*>(right));
		default: dispatchError(static_cast<Any*>(left), static_cast<Any*>(right));
			return 0;
	};
}
